Phone no: (021) 7989671 or email us: info@zahra-itsolution.com
Posted on 16 August 2024
Sebelum ke Tutorialnya saya akan menjelaskan sedikit apaitu Soft Delete.
Soft delete adalah teknik untuk menghapus data dari database tanpa benar-benar menghapusnya secara fisik. Sebaliknya, data yang dihapus ditandai sebagai "dihapus" dengan menambahkan timestamp pada kolom khusus, biasanya bernama deleted_at. Ini memungkinkan Anda untuk mengembalikan data tersebut jika diperlukan di masa depan atau jika terjadi kesalahan.
Untuk menerapkan soft delete pada tabel yang sudah ada di Laravel, ikuti langkah-langkah berikut:
Pertama, tambahkan kolom deleted_at
pada tabel yang ingin Anda terapkan soft delete. Anda bisa membuat migration baru untuk menambah kolom ini:
php artisan make:migration add_deleted_at_to_table_name --table=table_name
Kemudian, edit file migration yang baru dibuat, misalnya add_deleted_at_to_table_name.php
, untuk menambahkan kolom deleted_at
:
public function up()
{
Schema::table('table_name', function (Blueprint $table) {
$table->timestamp('deleted_at')->nullable();
});
}
public function down()
{
Schema::table('table_name', function (Blueprint $table) {
$table->dropColumn('deleted_at');
});
}
Jalankan migration untuk memperbarui tabel:
php artisan migrate
Tambahkan trait SoftDeletes
pada model yang bersangkutan. Misalnya, jika model Anda bernama Matakuliah
, edit model tersebut untuk menggunakan trait SoftDeletes
:
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class Matakuliah extends Model
{
use SoftDeletes;
protected $dates = ['deleted_at']; // Menentukan kolom soft delete
}
Dengan soft delete, query Eloquent Anda secara otomatis akan mengecualikan record yang telah dihapus dari hasil query. Anda tidak perlu membuat perubahan khusus pada query biasa Anda, tetapi jika Anda ingin mengambil semua record termasuk yang dihapus, Anda bisa menggunakan metode withTrashed()
:
$mataKuliah = MataKuliah::withTrashed()->get(); // Mengambil semua data, termasuk yang dihapus
onlyTrashed()
:$deletedMataKuliah = MataKuliah::onlyTrashed()->get(); // Mengambil hanya data yang dihapus
delete()
untuk menghapus record secara soft delete:$mataKuliah = MataKuliah::find($id); $mataKuliah->delete(); // Ini akan mengisi kolom deleted_at
restore()
:$mataKuliah = MataKuliah::onlyTrashed()->find($id); $mataKuliah->restore(); // Ini akan menghapus nilai kolom deleted_at
forceDelete()
:$mataKuliah = MataKuliah::onlyTrashed()->find($id); $mataKuliah->forceDelete(); // Ini akan menghapus record dari database secara permanen
Cara Kerja Soft Delete:
Penandaan Data sebagai Dihapus: Saat Anda melakukan soft delete, kolom khusus seperti deleted_at
diisi dengan timestamp saat data dihapus. Data tetap ada di database tetapi dianggap sudah dihapus oleh aplikasi.
Query Data: Ketika Anda melakukan query pada tabel, data yang dihapus tidak akan muncul dalam hasil query secara default. Laravel, misalnya, secara otomatis mengecualikan data dengan nilai deleted_at
yang tidak null dari hasil query menggunakan Eloquent ORM.
Mengembalikan Data yang Dihapus: Data yang dihapus dapat dipulihkan dengan menghapus nilai dari kolom deleted_at
. Ini memungkinkan Anda untuk "mengembalikan" data yang sebelumnya dianggap dihapus.
Menghapus Data Secara Permanen: Jika Anda ingin benar-benar menghapus data secara permanen, Anda dapat menggunakan metode khusus untuk menghapus data yang sudah ditandai sebagai dihapus.